package userConsole.service;

import org.json.JSONException;
import org.json.JSONObject;
import userConsole.jdbc.BaseJDBC;
import userConsole.jdbc.UserJDBC;
import userConsole.pojo.User;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 * @Author weishen
 */
public class SelectUserByUserNameService {
    public JSONObject selectUserByUserName(String username,String showCountStr, String pageStr) throws JSONException {
        JSONObject jsonObject = new JSONObject();
        /*
        分页操作
            1. 我们需要知道总计有多少条记录(整个表中)     count代表总计
            2. 我们需要知道每页显示多少条记录(页面上)     showCount代表每页显示
            3. 然后根据固定的算法，计算出总计有多少页     page
            page = (count - 1)/showCount + 1;

            select * from user limit 0, 4;         // 这里的4代表每页显示多少条
            select * from user limit 4, 4;
            select * from user limit 8, 4;
            select * from user limit 12, 4;
            // 每页开始的下标计算：  (页码 - 1)*每页显示多少条
         */
        Connection connection = BaseJDBC.createConnection();
        UserJDBC userJDBC = new UserJDBC();
        try {
            int count = userJDBC.selectCountForName(connection,username);              // 统计数据库总计有多少条记录
            int showCount = Integer.parseInt(showCountStr);            // 把前端传递过来的每页显示多少条记录，转换为int类型，方便计算
            int allPage = (count - 1)/showCount + 1;                   // 计算总页码
            int page = Integer.parseInt(pageStr);                      // 把前端传递的字符串页码转换为int类型
            int startIndex = (page - 1) * showCount;                   // 通过页码和每页显示多少条，计算需要从数据库的哪一条数据的下标开始获取
            ArrayList<JSONObject> list = userJDBC.pageForName(connection, username,startIndex, showCount);
            jsonObject.put("code", 200);
            jsonObject.put("msg", "查询用户分页数据成功");
            jsonObject.put("list", list);
            jsonObject.put("showCount", showCount);
            jsonObject.put("count", count);
            jsonObject.put("allPage", allPage);
            jsonObject.put("page", page);
        } catch (SQLException e) {
            e.printStackTrace();
            jsonObject.put("code", 306);
            jsonObject.put("msg", "系统繁忙，请稍候重试！");
        }
        return jsonObject;
    }
}
